import axios from 'axios'
// import { getToken } from '@/utils/storage'
import store from '@/store/index'
import { Message } from 'element-ui'
import router from '@/router'
const request = axios.create({
  // 如果用了同源代理，基地址只要写'/api',请求只要写其他字段即可
  // 因为浏览器会自动拼接，再去询问同源服务器，再去后端服务器请求数据
  // VUE_APP_BASE_API是全局变量，根据生产模式和开发模式不同显示不同的基地址
  baseURL: process.env.VUE_APP_BASE_API,
  // baseURL: 'http://interview-api-t.itheima.net',
  timeout: 20000
})

// 添加请求拦截器
request.interceptors.request.use(
  function(config) {
    // token从vuex里的getters中获取，因为vuex的最终都会流向getters，getters中的属性是依赖state的数据的
    const token = store.getters.token
    // 这里要不要加Bearer取决于接口文档，如果接口文档中写了，就加，没写，就直接放token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }

    return config
  },
  function(error) {
    return Promise.reject(error)
  }
)

// 添加响应拦截器
request.interceptors.response.use(
  function(response) {
    if (response.data instanceof Blob) return response.data
    const { data: { data, success, message }} = response
    if (success) {
      return data
    } else {
      Message.error(message)

      return Promise.reject(message)
    }
  },
  function(error) {
    console.dir(error)
    if (error.response) {
      if (error.response.status === 401) {
        // 清除token和用户信息
        store.dispatch('user/storeRemoveToken')
        Message.error('token异常')
        // 跳转回登入页面
        router.push('/')
      } else {
        Message.error('网络错误')
      }
    }

    return Promise.reject(error)
  }
)

export default request
